/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.jm.financeiro.view;

import br.jm.financeiro.datamodel.LazyDepartamento;
import br.jm.financeiro.entity.Departamento;
import br.jm.financeiro.sistema.eao.DepartamentoEao;
import java.io.Serializable;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.primefaces.event.SelectEvent;
import org.primefaces.model.LazyDataModel;

/**
 *
 * @author joao
 */
public class DepartamentoBean implements Serializable {

    private static final long serialVersionUID = 1L;
    private Departamento selectedDepartamento;
    private LazyDataModel<Departamento> lazyModel;
    private final DepartamentoEao departamentoJpa;

    public DepartamentoBean() {
        departamentoJpa = DepartamentoEao.getInstance();
        selectedDepartamento = new Departamento();

        lazyModel = new LazyDepartamento(departamentoJpa);
    }

    public void inserir(ActionEvent actionEvent) {
        FacesMessage msg = null;

        try {
            selectedDepartamento.setIdDepartamento(null);
            departamentoJpa.create(selectedDepartamento);

            lazyModel = new LazyDepartamento(departamentoJpa);

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, LoginBean.AtualizaLog("", "Departamento Inserido com Sucesso: ".concat(selectedDepartamento.getDscDepartamento())),selectedDepartamento.getDscDepartamento());

        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Inserir" + selectedDepartamento.getDscDepartamento(),
                    e.getMessage());
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void alterar(ActionEvent actionEvent) {
        FacesContext ctx = FacesContext.getCurrentInstance();
        FacesMessage msg = null;

        try {
            departamentoJpa.edit(selectedDepartamento);

            lazyModel = new LazyDepartamento(departamentoJpa);

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, LoginBean.AtualizaLog("", "Departamento Alterado com Sucesso: ".concat(selectedDepartamento.getDscDepartamento())),
                    selectedDepartamento.getDscDepartamento());
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Alterar: " + selectedDepartamento.getDscDepartamento(),
                    e.getMessage());
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void excluir(ActionEvent actionEvent) {
        FacesMessage msg = null;

        try {
            departamentoJpa.destroy(selectedDepartamento);

            lazyModel = new LazyDepartamento(departamentoJpa);

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, LoginBean.AtualizaLog("", "Departamento Excluido com Sucesso: ".concat(selectedDepartamento.getDscDepartamento())),
                    selectedDepartamento.getDscDepartamento());
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Excluir: " + selectedDepartamento.getDscDepartamento(),
                    e.getMessage());
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public LazyDataModel<Departamento> getLazyModel() {
        return lazyModel;
    }

    public void setLazyModel(LazyDataModel<Departamento> lazyModel) {
        this.lazyModel = lazyModel;
    }

    public Departamento getSelectedDepartamento() {
        if (selectedDepartamento == null) {
            selectedDepartamento = new Departamento();
        }
        return selectedDepartamento;
    }

    public void setSelectedDepartamento(Departamento selectedDepartamento) {

        if (selectedDepartamento == null) {
            selectedDepartamento = new Departamento();
        }

        this.selectedDepartamento = selectedDepartamento;
    }

    public void onRowSelect(SelectEvent event) {
        this.selectedDepartamento = (Departamento) event.getObject();
    }

    public void preparaInserir(ActionEvent event) {
        this.selectedDepartamento = new Departamento();
    }
}
